package com.android.pos;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.android.pos.db.POSDbAdapter;

public class TableEdit extends Activity {
	private EditText	mTableText;
	private EditText	mDescText;
	private Button		mSaveBtn;
	
    private Long mRowId;	
    
    private static final String Flag = "TableEdit";	    
	
    // DB 조작하는 클래스 로드
    private POSDbAdapter mDbHelper;	
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tableedit);
        
        // 디비 클래스에다가 this 액티비티를 넣어서 객체 생성
        mDbHelper = new POSDbAdapter(this);
        // 디비 클래스의 open 메써드 실행
        // getWritableDatabase 실행하기 위함임
        mDbHelper.open();
        
        Log.d(Flag, "It's about to fill data...");
        // layout 폴더 안에 있는 note_edit.xml을 기초로 화면을 그림

        mTableText 	= (EditText) findViewById(R.id.input_table);
        mDescText 	= (EditText) findViewById(R.id.input_desc);
        mSaveBtn 		= (Button) findViewById(R.id.btn_saveitem3);

        Log.d(Flag, "Check mRowId logic...");
        // 만약 savedInstanceState 가 null 이면 null, 아니면 KEY_ITEM 가져옴 
        mRowId = (savedInstanceState == null) ? null :
            (Long) savedInstanceState.getSerializable(POSDbAdapter.KEY_TABLE);
        
        Log.d(Flag, "Check secondly mRowId logic...");        
        if (mRowId == null) {
            Bundle extras = getIntent().getExtras();
            mRowId = extras != null ? extras.getLong(POSDbAdapter.KEY_TABLEROWID)
                                    : null;
        }
        
        Log.d(Flag, "Run populateFields...");        
        // run populateFields
        populateFields();
        
        Log.d(Flag, "populateFields ends...");
        mSaveBtn.setOnClickListener(new View.OnClickListener() {

        	public void  onClick(View view){
        		setResult(RESULT_OK);
        		finish();
        	}
        
        });
    }
    
    
    
    private void populateFields() {
    	Log.d(Flag, "In the populateFields");
    	if (mRowId != null){
    		Cursor table = mDbHelper.fetchTables(mRowId);
    		startManagingCursor(table);
    		
        	mTableText.setText(table.getString(
        			table.getColumnIndexOrThrow(POSDbAdapter.KEY_TABLE)));

   			mDescText.setText(table.getString(
   					table.getColumnIndexOrThrow(POSDbAdapter.KEY_DESC)));
    		
    		
    	}
    }
    
    /*
     * @see android.app.Activity#onSaveInstanceState(android.os.Bundle)
     * 아래 로직들은 액티비티의 라이프 싸이클이 OS의 리소스 상황에 따라 없어지는 위험한 상황에 대비해
     * 각각의 상황에 상태를 저장하도록 하는 안드로이드의 특징이다.
     */
    @Override
    protected void onSaveInstanceState(Bundle outState){
    	super.onSaveInstanceState(outState);
    	saveState();
    	Log.d(Flag,"onSaveInstanceState...");       	
    	outState.putSerializable(POSDbAdapter.KEY_TABLEROWID, mRowId);
    }
    
    @Override
    protected void onPause(){
    	super.onPause();
    	Log.d(Flag,"onPause...");    	
    	saveState();
    }
    
    @Override
    protected void onResume(){
    	super.onResume();
    	Log.d(Flag,"onResume...");
    	populateFields();
    }
    
    private void saveState(){
    	Log.d(Flag,"saveState...");
    	String	title = mTableText.getText().toString();
    	String	body = mDescText.getText().toString();
    	
    	if(mRowId == null){
    		long id = mDbHelper.createTable(title, body);
    		if (id > 0){
    			mRowId = id;
    		}
    	} else {
    		mDbHelper.updateTable(mRowId, title, body);
    	}
    	
    }    

}
